package com.kws.tool.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.*;
import java.util.List;

/**
 * @author : zhangbenting
 * @date : 2024/11/30 10:18
 * @Version: 1.0
 */
@Data
@ApiModel(description = "微网测算(光储一体化)输入实体")
public class LightStorageMicroNetworkDto {

    @ApiModelProperty(value = "安装区域", required = true)
    @NotNull(message = "安装区域不能为空")
    private String azqy;

    @ApiModelProperty(value = "安装详细地址", required = true)
    @NotBlank(message = "安装详细地址不能为空")
    private String azxxdz;

    @ApiModelProperty(value = "屋顶类型", required = true)
    @NotBlank(message = "屋顶类型不能为空")
    private String wdlx;

    @ApiModelProperty(value = "用户类型", required = true)
    @NotBlank(message = "用户类型不能为空")
    private String yhlx;

    @ApiModelProperty(value = "屋顶面积", required = true)
    @NotBlank(message = "屋顶面积不能为空")
    private String wdmj;

    @ApiModelProperty(value = "用电方式", required = true)
    @NotBlank(message = "用电方式不能为空")
    private String ydfs;

    @ApiModelProperty(value = "年用电量", required = true)
    @NotBlank(message = "年用电量不能为空")
    private String nydl;

    @ApiModelProperty(value = "计费方式", required = true)
    @NotBlank(message = "计费方式不能为空")
    private String jffs;

    @ApiModelProperty(value = "光伏报装容量", required = true)
    @NotBlank(message = "光伏报装容量不能为空")
    private String bzrl;

    @ApiModelProperty(value = "典型日负荷曲线", required = true)
    @NotBlank(message = "典型日负荷曲线不能为空")
    private String dxrfqx;

    @ApiModelProperty(value = "月度用电量（选填）")
    private String ydydl;

    @ApiModelProperty(value = "年度用电量（选填）")
    private String ndydl;

    @ApiModelProperty(value = "投资方式", required = true)
    @NotBlank(message = "投资方式不能为空")
    private String tzfs;

    @ApiModelProperty(value = "首年衰减")
    @NotBlank(message = "投资方式不能为空")
    private String snsj;

    @ApiModelProperty(value = "逐年递减")
    @NotBlank(message = "逐年递减不能为空")
    private String zndj;

    @ApiModelProperty(value = "发电效率")
    @NotBlank(message = "发电效率不能为空")
    private String fdxl;

    @ApiModelProperty(value = "储能单位造价")
    @NotBlank(message = "储能单位造价不能为空")
    private String cndwzj;

    @ApiModelProperty(value = "年利用小时数")
    @PositiveOrZero(message = "年利用小时数不能为负数")
    private String nlyxss;

    @ApiModelProperty(value = "每kw光伏建设成本")
    @NotBlank(message = "每kw光伏建设成本不能为空")
    private String mkwgfjscb;

    @ApiModelProperty(value = "每kw光伏运维成本")
    @NotBlank(message = "光伏运维总成本不能为空")
    private String mkwgfywcb;

    @ApiModelProperty(value = "放电时长", required = true)
    @NotBlank(message = "放电时长不能为空")
    private String fdsc;

    @ApiModelProperty(value = "运营时间")
    @NotBlank(message = "运营时间不能为空")
    private String yysj;

    @ApiModelProperty(value = "上网电价")
    @NotBlank(message = "上网电价不能为空")
    private String swdj;

    @ApiModelProperty(value = "分成比例")
    @NotBlank(message = "分成比例不能为空")
    private String fcbl;

    @ApiModelProperty(value = "峰时电价")
    @NotBlank(message = "峰时电价不能为空")
    private String fsdj;

    @ApiModelProperty(value = "谷时电价")
    @NotBlank(message = "谷时电价不能为空")
    private String gsdj;

    @ApiModelProperty(value = "光伏配储比例")
    @NotBlank(message = "光伏配储比例价不能为空")
    private String gfpcbl;

    @ApiModelProperty(value = "储电池运维成本")
    @NotBlank(message = "储电池运维成本不能为空")
    private String cdcywcb;

    @ApiModelProperty(value = "减碳系数", required = true)
    @NotBlank(message = "减碳系数不能为空")
    private String jtxs;

    @ApiModelProperty(value = "加权电价")
    @NotBlank(message = "加权电价不能为空")
    private String jqdj;

//    @ApiModelProperty(value = "地址", required = true)
//    @NotBlank(message = "地址不能为空")
//    private String address;
//
//    @ApiModelProperty(value = "屋顶类型，可选值为平房、别墅", required = true)
//    @NotBlank(message = "屋顶类型不能为空")
//    private String roofType;
//
//    @ApiModelProperty(value = "用户类型，可选值为个人、企业", required = true)
//    @NotBlank(message = "用户类型不能为空")
//    private String userType;
//
//    @ApiModelProperty(value = "屋顶面积", required = true)
//    @NotNull(message = "屋顶面积不能为空")
//    @Positive(message = "屋顶面积必须是正数")
//    private Double roofArea;
//
//    @ApiModelProperty(value = "用电方式，可选值为自发自用余电不上网、自发自用余电上网、全额上网、余电上网", required = true)
//    @NotBlank(message = "用电方式不能为空")
//    private String powerUsageMode;
//
//    @ApiModelProperty(value = "年用电量", required = true)
//    @NotNull(message = "年用电量不能为空")
//    @PositiveOrZero(message = "年用电量不能为负数")
//    private Double annualPowerConsumption;
//
//    @ApiModelProperty(value = "用电类型，可选值为400V/10KV", required = true)
//    @NotBlank(message = "用电类型不能为空")
//    private String powerType;
//
//    @ApiModelProperty(value = "计费方式，可选值为容量计费、需量计费", required = true)
//    @NotBlank(message = "计费方式不能为空")
//    private String billingMode;
//
//    @ApiModelProperty(value = "报装容量", required = true)
//    @NotNull(message = "报装容量不能为空")
//    @PositiveOrZero(message = "报装容量不能为负数")
//    private Double installedCapacity;
//
//    @ApiModelProperty(value = "变压器容量")
//    @DecimalMin(value = "0.0", inclusive = true, message = "变压器容量不能为负数")
//    private Double transformerCapacity;
//
//    @ApiModelProperty(value = "典型日负荷曲线", required = true)
//    @NotBlank(message = "典型日负荷曲线不能为空")
//    private String typicalLoadCurve;
//
//    @ApiModelProperty(value = "月度用电量（选填）")
//    @DecimalMin(value = "0.0", inclusive = true, message = "月度用电量不能为负数")
//    private Double monthlyPowerConsumption;
//
//    @ApiModelProperty(value = "年度用电量（选填）")
//    @DecimalMin(value = "0.0", inclusive = true, message = "年度用电量不能为负数")
//    private Double annualPowerConsumptionOptional;
//
//    @ApiModelProperty(value = "电压等级", required = true)
//    @NotBlank(message = "电压等级不能为空")
//    private String voltageLevel;
//
//    @ApiModelProperty(value = "投资方式，可选值为自投自建、第三方投资", required = true)
//    @NotBlank(message = "投资方式不能为空")
//    private String investmentMode;
//
//    @ApiModelProperty(value = "光伏板安装方式（铺设方式），可选值为最佳倾角、平铺", required = true)
//    @NotBlank(message = "光伏板安装方式不能为空")
//    private String installationMethod;
//
//    @ApiModelProperty(value = "运营年限，默认值为25年")
//    @Min(value = 1, message = "运营年限必须大于0")
//    private Integer operationYears = 25;
//
//    @ApiModelProperty(value = "首年衰减，默认值为2%")
//    @DecimalMin(value = "0.0", inclusive = true, message = "首年衰减不能为负数")
//    @DecimalMax(value = "1.0", inclusive = true, message = "首年衰减不能超过100%")
//    private Double firstYearDegradation = 0.02;
//
//    @ApiModelProperty(value = "首年后逐年衰减，默认值为0.3%")
//    @DecimalMin(value = "0.0", inclusive = true, message = "逐年衰减不能为负数")
//    @DecimalMax(value = "1.0", inclusive = true, message = "逐年衰减不能超过100%")
//    private Double subsequentYearDegradation = 0.003;
//
//    @ApiModelProperty(value = "发电效率，默认值为80%")
//    @DecimalMin(value = "0.0", inclusive = true, message = "发电效率不能为负数")
//    @DecimalMax(value = "1.0", inclusive = true, message = "发电效率不能超过100%")
//    private Double powerGenerationEfficiency = 0.8;
//
//    @ApiModelProperty(value = "光储一体化策略，可选值为经济性最优模式、光伏消纳最大模式/峰谷套利模式/需求响应模式/虚拟电厂模式", required = true)
//    @NotBlank(message = "光储一体化策略不能为空")
//    private String storageStrategy;
//
//    @ApiModelProperty(value = "每KW光伏建设成本，默认设置及手动输入，每平米光伏建设成本=光伏建设总成本/光伏板安装面积")
//    @DecimalMin(value = "0.0", inclusive = true, message = "光伏建设成本不能为负数")
//    private Double costPerKw;
//
//    @ApiModelProperty(value = "气象源（光照数据源），默认设置及手动输入", required = true)
//    @NotBlank(message = "气象源不能为空")
//    private String weatherSource;
//
//    @ApiModelProperty(value = "组件类型", required = true)
//    @NotBlank(message = "组件类型不能为空")
//    private String moduleType;
//
//    @ApiModelProperty(value = "每KW光伏运维成本，默认设置及手动输入，每平米光伏运维总成本/光伏板安装面积")
//    @DecimalMin(value = "0.0", inclusive = true, message = "光伏运维成本不能为负数")
//    private Double maintenanceCostPerKw;
//
//    @ApiModelProperty(value = "上网电价-上网基本电价，默认设置及手动输入，可为空，支持自动导入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "上网电价不能为负数")
//    private Double onGridElectricityPrice;
//
//    @ApiModelProperty(value = "分成比例，默认值为8折")
//    @DecimalMin(value = "0.0", inclusive = true, message = "分成比例不能为负数")
//    @DecimalMax(value = "1.0", inclusive = true, message = "分成比例不能超过100%")
//    private Double splitRatio = 0.8;
//
//    @ApiModelProperty(value = "满发小时数，默认数值带入")
//    @PositiveOrZero(message = "满发小时数不能为负数")
//    private Double fullPowerHours;
//
//    @ApiModelProperty(value = "加权电价，默认数值带入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "加权电价不能为负数")
//    private Double weightedElectricityPrice;
//
//    @ApiModelProperty(value = "运营时间，默认值为300")
//    @PositiveOrZero(message = "运营时间不能为负数")
//    private Integer operationTime = 300;
//
//    @ApiModelProperty(value = "电池寿命，默认值为6000")
//    @PositiveOrZero(message = "电池寿命不能为负数")
//    private Integer batteryLife = 6000;
//
//    @ApiModelProperty(value = "使用年限，默认值为10年")
//    @PositiveOrZero(message = "使用年限不能为负数")
//    private Integer usageYears = 10;
//
//    @ApiModelProperty(value = "放电深度，默认值为90%")
//    @DecimalMin(value = "0.0", inclusive = true, message = "放电深度不能为负数")
//    @DecimalMax(value = "1.0", inclusive = true, message = "放电深度不能超过100%")
//    private Double dischargeDepth = 0.9;
//
//    @ApiModelProperty(value = "放电时长，可选值为0.5小时、默认1小时、2小时、4小时", required = true)
//    @NotBlank(message = "放电时长不能为空")
//    private String dischargeDuration;
//
//    @ApiModelProperty(value = "储电池建设成本，默认设置及手动输入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "储电池建设成本不能为负数")
//    private Double batteryConstructionCost;
//
//    @ApiModelProperty(value = "储电池运维成本，默认设置及手动输入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "储电池运维成本不能为负数")
//    private Double batteryMaintenanceCost;
//
//    @ApiModelProperty(value = "光伏单位造价，默认设置及手动输入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "光伏单位造价不能为负数")
//    private Double pvUnitCost;
//
//    @ApiModelProperty(value = "储能单位造价，默认设置及手动输入")
//    @DecimalMin(value = "0.0", inclusive = true, message = "储能单位造价不能为负数")
//    private Double storageUnitCost;
//
//    @ApiModelProperty(value = "基本电费类型，默认设置及手动输入", required = true)
//    @NotBlank(message = "基本电费类型不能为空")
//    private String basicElectricityType;

}
